package com.bestcem.xm.label.service;

import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.label.entity.pojo.LabelGroupDO;
import com.bestcem.xm.label.grpc.service.param.label.ListLabelsParam;
import com.bestcem.xm.label.grpc.service.param.labelgroup.CreateLabelGroupParam;
import com.bestcem.xm.label.grpc.service.param.labelgroup.UpdateLabelGroupNameParam;
import com.bestcem.xm.label.service.dto.LabelGroupDTO;
import com.bestcem.xm.label.service.dto.label.LabelInfoDTO;

import java.util.List;

/**
 * @Description 标签组相关服务接口
 * @Author dc.wang <dc.wang@idiaoyan.com>
 * @Date 2021/5/18 @Version V1.0
 */
public interface LabelGroupService {

    /**
     * 查询当前企业所有的标签组信息
     *
     * @param orgId 企业ID not null
     * @return 如果不存在，返回空数组
     */
    ServiceResult<List<LabelGroupDTO>> listLabelGroup(String orgId);

    /**
     * 新建标签组。
     * 一个企业中的标签组数量不能超过 20 个，标签组名不允许重复
     *
     * @param param 创建参数 not null
     * @return 创建的标签组
     */
    ServiceResult<LabelGroupDTO> createLabelGroup(CreateLabelGroupParam param);

    /**
     * 通过标签组ID更新标签组名称、标签值中的标签组名称。
     * 注：不允许重名，名称长度 < 31
     *
     * @param updateLabelGroupNameParam 标签组参数
     * @return 更新的标签组信息
     */
    ServiceResult<String> updateLabelGroup(UpdateLabelGroupNameParam updateLabelGroupNameParam);

    /**
     * 通过标签组ID删除标签组、标签、标签值
     *
     * @param labelGroupId 标签组ID
     * @return 删除的标签组信息
     */
    ServiceResult<LabelGroupDTO> deleteLabelGroup(String labelGroupId);

    /**
     * 查询标签组下所有的标签信息
     *
     * @param param
     * @return
     */
    List<LabelInfoDTO> listLabels(ListLabelsParam param);

    /**
     * 根据id获取标签组信息
     *
     * @param labelGroupId
     * @return
     */
    LabelGroupDO findById(String labelGroupId);
}
